package join.model.beans;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

import org.springframework.format.annotation.NumberFormat;
import org.springframework.format.annotation.NumberFormat.Style;

import join.util.AppListUtil;
import join.util.RepositoryUtil;

@Entity
@Table(name="proyecto_costo", schema=RepositoryUtil.ESQUEMA_NOMBRE)
public class ProyectoCosto {

	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	@Column(name ="id", nullable=false)
	private Long id;
	@Column(name ="proyecto", nullable=false)
	private Long proyecto;
	@Column(name ="naturaleza", nullable=false)
	private String naturaleza;
	@Column(name ="cuenta", nullable=true)
	private String cuenta;
	@Column(name ="cuenta_nombre", nullable=true)
	private String cuentaNombre;
	@Column(name ="referencia", nullable=true)
	private String referencia;
	@Column(name ="referencia_codigo", nullable=true)
	private Long referenciaCodigo;
	@Column(name ="valor_estimado", nullable=true)
	@NumberFormat (style=Style.NUMBER)
	private Long valorEstimado;
	@Column(name ="valor_ejecutado", nullable=true)
	@NumberFormat (style=Style.NUMBER)
	private Double valorEjecutado;
	@Column(name ="estado", nullable=false)
	private String estado;
	
	/**
	 * @return the id
	 */
	public Long getId() {
		return id;
	}
	/**
	 * @param id the id to set
	 */
	public void setId(Long id) {
		this.id = id;
	}
	/**
	 * @return the proyecto
	 */
	public Long getProyecto() {
		return proyecto;
	}
	/**
	 * @param proyecto the proyecto to set
	 */
	public void setProyecto(Long proyecto) {
		this.proyecto = proyecto;
	}
	/**
	 * @return the naturaleza
	 */
	public String getNaturaleza() {
		return naturaleza;
	}
	/**
	 * @param naturaleza the naturaleza to set
	 */
	public void setNaturaleza(String naturaleza) {
		this.naturaleza = naturaleza;
	}
	/**
	 * @return the cuenta
	 */
	public String getCuenta() {
		return cuenta;
	}
	/**
	 * @param cuenta the cuenta to set
	 */
	public void setCuenta(String cuenta) {
		this.cuenta = cuenta;
	}
	
	/**
	 * @return the cuentaNombre
	 */
	public String getCuentaNombre() {
		return cuentaNombre;
	}
	
	/**
	 * @param cuentaNombre the cuentaNombre to set
	 */
	public void setCuentaNombre(String cuentaNombre) {
		this.cuentaNombre = cuentaNombre;
	}
	
	/**
	 * @return the referencia
	 */
	public String getReferencia() {
		return referencia;
	}
	/**
	 * @param referencia the referencia to set
	 */
	public void setReferencia(String referencia) {
		this.referencia = referencia;
	}
	/**
	 * @return the referenciaCodigo
	 */
	public Long getReferenciaCodigo() {
		return referenciaCodigo;
	}
	/**
	 * @param referenciaCodigo the referenciaCodigo to set
	 */
	public void setReferenciaCodigo(Long referenciaCodigo) {
		this.referenciaCodigo = referenciaCodigo;
	}
	/**
	 * @return the valorEstimado
	 */
	public Long getValorEstimado() {
		return valorEstimado;
	}
	/**
	 * @param valorEstimado the valorEstimado to set
	 */
	public void setValorEstimado(Long valorEstimado) {
		this.valorEstimado = valorEstimado;
	}
	/**
	 * @return the valorEjecutado
	 */
	public Double getValorEjecutado() {
		return valorEjecutado;
	}
	/**
	 * @param valorEjecutado the valorEjecutado to set
	 */
	public void setValorEjecutado(Double valorEjecutado) {
		this.valorEjecutado = valorEjecutado;
	}
	/**
	 * @return the estado
	 */
	public String getEstado() {
		return estado;
	}
	/**
	 * @param estado the estado to set
	 */
	public void setEstado(String estado) {
		this.estado = estado;
	}
	
	/**
	 * Diferencia entre el estimado y el ejecutado
	 * @return Estimado - Ejecutado
	 */
	public Double getDiferencia(){
		Double diferencia = new Double(0);
		
		if (getValorEstimado() !=null && getValorEjecutado()!=null){
			diferencia = getValorEjecutado() - getValorEjecutado();	
		}
		
		return diferencia;
	}
	
	/**
	 * Diferencia entre el estimado y el ejecutado
	 * @return Estimado - Ejecutado
	 */
	public Double getDiferenciaPorcentaje(){
		return (getValorEjecutado() / getValorEstimado())*100;
	}
	
	/**
	 * @param estado the estado to set
	 */
	public String getEstadoNombre() {
		return AppListUtil.listaProcesoTexto("proyectoCostoEstado", getEstado());
	}
	
	/**
	 * @param estado the estado to set
	 */
	public String getNaturalezaNombre() {
		return AppListUtil.listaProcesoTexto("proyectoCostoNaturaleza", getNaturaleza());
	}
}